#include "widget.h"
#include "ui_widget.h"
#include "QTreeWidgetItem"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置表头名字
    ui->treeWidget->setHeaderLabel("动物");
    //开辟节点
    //每个节点都可以看做单独的一个树
    QTreeWidgetItem* item1=new QTreeWidgetItem();
    //每个节点都可以设置多列
    //给开辟的节点为它自己的根节点，给其初始化
    item1->setText(0,"猫");
    //把这个节点设置到TreeWidget上
    //不需要写delete，因为TreeWidget被删除的时候该节点也会被删除
    ui->treeWidget->addTopLevelItem(item1);

    QTreeWidgetItem* item2=new QTreeWidgetItem();
    item2->setExpanded(true);
    item2->setText(0,"狗");
    ui->treeWidget->addTopLevelItem(item2);
}

Widget::~Widget()
{
    delete ui;
}

//插入子节点
void Widget::on_pushButton_clicked()
{
    QTreeWidgetItem* cur=ui->treeWidget->currentItem();
    //没有选中节点，直接返回
    if(cur==nullptr)
        return;

    //选中节点后，再插入节点
    //获取LineEdit的text信息
    QString s=ui->lineEdit->text();
    //LineEdit为空也不能插入节点
    if(s.isEmpty())
        return;
    //开辟节点
    QTreeWidgetItem* newitew=new QTreeWidgetItem();
    //用LineEdit的text的内容初始化节点
    newitew->setText(0,s);
    //插入选中的节点下
    cur->addChild(newitew);
    cur->setExpanded(true);
    ui->lineEdit->clear();
}

//添加头节点
//添加头节点不需要选中节点
void Widget::on_pushButton_2_clicked()
{
    QString s=ui->lineEdit->text();
    if(s.isEmpty())
        return;
    QTreeWidgetItem* newhead=new QTreeWidgetItem();
    newhead->setText(0,s);
    ui->treeWidget->addTopLevelItem(newhead);
    ui->lineEdit->clear();
}

void Widget::on_pushButton_3_clicked()
{
    QTreeWidgetItem* cur=ui->treeWidget->currentItem();
    if(cur==nullptr)
        return;
    //判断cur是否为头节点
    //parent为nullptr即为头节点
    if(cur->parent()==nullptr)
    {
        //找到cur在头节点区域中的下标
        int top=ui->treeWidget->indexOfTopLevelItem(cur);
        //通过找到的下标来删除头节点
        ui->treeWidget->takeTopLevelItem(top);
    }
    else
    {
        //删除普通节点
        //先找到cur的父亲节点
        QTreeWidgetItem* p=cur->parent();
        //通过父亲节点删除cur
        p->removeChild(cur);
    }
}
